#include <stdio.h>
#include <uuid/uuid.h>
#include <stdint.h>
#include <nit/list.h>
#include <nit/hset.h>
#include <nit/hmap.h>
#include "uii.h"

void
print(Uii_cnti *cnti, Uii_u *u)
{
	printf("%s\n", (char *) cnti->args->expr->i.val);
}

int
main(int argc, char *argv[])
{
	Uii_elist *args = uii_nest(uii_expr_val("hello, world!"));
	Uii_cnti *cnti;
	Uii_f *ef = uii_ef(NULL, print);
	Uii_f *df;
	Uii_f *cf;
	Uii_u *u;

	u = uii_u_new("./dat.uii/", NULL);
	uii_u_add(u, ef);
	uii_dopen("./shared.so");
	df = uii_df(NULL, "./shared.so", "shared_print", 0);
	uii_u_add(u, df);

	cnti = uii_cnti_expr(uii_expr_fa(ef->id, args));
	uii_eval(cnti, u);
	cnti = uii_cnti_expr(uii_expr_fa(df->id, args));
	uii_eval(cnti, u);

	cf = uii_cf(NULL, uii_elist_va(2,
				       uii_expr_fa(df->id, args),
				       uii_expr_fa(ef->id, args)),
		    0);
	uii_u_add(u, cf);
	cnti = uii_cnti_expr(uii_expr_fa(cf->id, NULL));
	uii_eval(cnti, u);

	uii_u_ser(u, df);
	uii_u_ser(u, cf);

	uii_free(ef);
	uii_free(df);
	uii_dclose("./shared.so");
	return 0;
}
